通過在Spring Boot中集成FCM,實現通知的發送和管理。我們將建立一個Spring Boot程序,配置Firebase Admin SDK,設置FCM服務,並建立API端點推送通知。
用於表示 Firebase Cloud Messaging 的請求。
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class FcmRequest {
private String fcm_token;
private String title;
private String body;
public String getFcm_token() {
return fcm_token;
}
public void setFcm_token(String fcm_token) {
this.fcm_token = fcm_token;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
負責處理Firebase Cloud Messaging(FCM)通知的發送。
使用 Firebase Messaging構建一個包含標題與內容的消息並發送到指定的設備token。
@Service
public class FcmService {
public void sendNotification(String token, String title, String body) {
// 設定 Firebase Messaging
FirebaseMessaging messaging = FirebaseMessaging.getInstance();
Message message = Message.builder()
.putData("title", title)
.putData("body", body)
.setToken(token)
.build();
try {
// 發送通知
messaging.send(message);
} catch (FirebaseMessagingException e) {
e.printStackTrace();
}
}
}
這邊的token指的是用戶端的設備token,並非使用者身分token。
用於處理與 Firebase Cloud Messaging(FCM)相關的 HTTP 請求。
@RestController
@RequiredArgsConstructor
@RequestMapping("/fcm")
public class FcmController {
private final FcmService service;
@PostMapping("/send")
public void sendNotification(@RequestBody FcmRequest request) {
// 發送通知
service.sendNotification(request.getFcm_token(), request.getTitle(), request.getBody());
}
}
使用Firebase Admin SDK的私密金鑰來建立連接。
(請先將私密金鑰json檔放置專案最外圍的目錄下)
@Configuration
public class FcmConfiguration {
@Bean
public FirebaseApp initializeFirebaseApp() {
try {
// 載入Firebase Admin SDK(json請依照添加的"私密金鑰.json"加入)
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(new FileSystemResource("itdemo-************************.json").getInputStream()))
.build();
// 初始化Firebase App
FirebaseApp firebaseApp = FirebaseApp.initializeApp(options);
return firebaseApp;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}